<?php
class THtml extends CHtml
{
    static $editorCoreJs = false;
    public static $errorMessageCss = 'popup-alert left';

    public static function errorTbLeft($model,$attribute,$htmlOptions=array())
    {
        self::resolveName($model,$attribute); // turn [a][b]attr into attr
        $error=$model->getError($attribute);
        if($error!='')
        {
            if(!isset($htmlOptions['class']))
                $htmlOptions['class']=self::$errorMessageCss;
            return self::tag(self::$errorContainerTag,$htmlOptions,$error);
        }
        else
            return '';
    }


    /*
     * Функция публикует ресурсы редактора TinyMce
     */
    protected static function registerTHtmAsset()
    {
        if(!THtml::$editorCoreJs)
        {
            // $path = Yii::app()->assetManager->publish(Yii::getPathOfAlias('application.modules.admin.components.asset'));
            // Yii::app()->getClientScript()->registerScriptFile($path.'/tinymce.min.js',CClientScript::POS_END);
            // Yii::app()->getClientScript()->registerScriptFile($path.'/tinymce/themes/theme.min.js',CClientScript::POS_END);
            // THtml::$editorCoreJs = true;
            $cs = Yii::app()->clientScript;
            $cs->addPackage('tinymce',array(
                // Где искать подключаемые файлы JS и CSS
                'baseUrl' => '/js/',
                'js'=>array('tinymce/tinymce.min.js','tinymce/themes/modern/theme.min.js'),
                // Подключает файл /js/highcharts/highcharts.css
                //'css' => array('highcharts.css'),
                // Зависимость от другого пакета
                // 'depends'=>array('jquery'),
            ));
            $cs->registerPackage('tinymce');
        }
    }

    public static function addClass($class,$htmlOptions=array())
    {

        if(isset($htmlOptions["class"]))
            $htmlOptions["class"] .= " ".$class;
        else $htmlOptions["class"] = $class;

        return $htmlOptions;
    }

    /*
     * Функция обертывает пустую textarea из модели  редактором TinyMce
     */
    public static function editorField($name, $value = '', $htmlOptions = array())
    {
        THtml::registerTHtmlAsset();
        return CHtml::textArea($name, $value, THtml::addClass("article", $htmlOptions));
    }

    /*
     * Инициализация редактора TinyMce
     */
    public static function initEditor($htmlOptions = array())
    {

        if(!isset($htmlOptions['id']))
        {
            $htmlOptions['id'] = 'default_tinymce_editor';
        }
        if(!isset($htmlOptions['width']))
        {
            $htmlOptions['width'] = '300';
        }
        if(!isset($htmlOptions['height']))
        {
            $htmlOptions['height'] = '300';
        }
        $js=<<<EOD
        tinymce.init({
                        width: {$htmlOptions['width']},
                        height: {$htmlOptions['height']},
                        mode : 'exact',
                        elements : '{$htmlOptions['id']}',
                        language : 'ru',
                        plugins: [
                                     "advlist autolink lists link image charmap print preview anchor",
                                     "searchreplace visualblocks code fullscreen",
                                     "insertdatetime media table contextmenu paste moxiemanager"
                                 ],

                        setup: function(editor) {
                                                var data,textarea,editorData;
                                                editor.on('blur', function(e) {
                                                    editorData = tinymce.activeEditor.getContent();
                                                    textarea = $('textarea#{$htmlOptions['id']}');
                                                        if(editorData !==''){
                                                           textarea.append(editorData);
                                                        }else
                                                        {
                                                            textarea.blur();
                                                        }
                                                });
                                                editor.on('focus', function(e) {
                                                     textarea = $('textarea#{$htmlOptions['id']}').focus();
                                                });
                                                editor.on('keyup', function(e) {

                                                    editorData = tinymce.activeEditor.getContent();
                                                    var textarea = $('textarea#{$htmlOptions['id']}');
                                                        if(editorData !==''){
                                                            textarea.html(editorData).blur();
                                                        }else{
                                                            textarea.html('').blur();
                                                        }
                                                });
                                                editor.on('ExecCommand', function(e) {
                                                    editorData = tinymce.activeEditor.getContent();
                                                    textarea = $('textarea#{$htmlOptions['id']}');
                                                    textarea.html(editorData);
                                                    textarea.click().blur();
                                                });
                                            }
                                            //tinymce.activeEditor.windowManager.alert('Hello World!');
     });
EOD;
        Yii::app()->clientScript->registerScript('tinymce_init',$js);
    }
    /**
     * Функция обертывает textarea с данными из модели  редактором TinyMce
     */
    public static function activeEditorField($model,$attribute,$htmlOptions=array())
    {
        THtml ::registerTHtmAsset();
        self::resolveNameID($model,$attribute,$htmlOptions);
        self::clientChange('submit',$htmlOptions);
        return self::activeTextArea($model,$attribute, THtml::addClass("default", $htmlOptions));
    }

    /**
     * Стилизованный select под Twitter Bootstrap
     * @param $model
     * @param $attribute
     * @param array $data
     * @param array $htmlOptions
     * @return string
     */
    public function activeDropDownListTb($model,$attribute,$data = array(),$htmlOptions = array())
    {
        if(isset($htmlOptions['id']))
        {
            $select_id = $htmlOptions['id'];
        }
        else
        {
            $select_id = 'default-select';
        }

        $script = '$(function(){
                        var select,li,txt,id,i,selectOption,optLen;
                        var select = $("#'.$select_id.'");
                        var li = $(select).find("ul li");
                        li.click(function(e){
                            txt = $(this).text();
                            id = $(this).find("a").data("id");
                            $("#'.$select_id.' input:first-child").val(txt).attr("id",id);
                            selectOption = $("#MenuItem_'.$attribute.' option");
                            optLen = selectOption.length;
                            for(i=0;i < optLen;i+=1)
                            {
                                if(selectOption[i].value == id)
                                {
                                   $(selectOption[i]).attr("selected","selected");
                                }
                                else
                                {
                                    if(selectOption[i]+":selected"){
                                        $(selectOption[i]).removeAttr("selected");
                                    }
                                }
                            }
                         });
        });';

        //Yii::app()->clientScript->registerScript('select',$script,CClientScript::POS_HEAD);

        $element = CHtml::openTag('div',array('id'=>$select_id,'class'=>'btn-group'));
        $element .= CHtml::button(current($data),array('class'=>'btn btn-default btn-select dropdown-toggle','data-toggle'=>'dropdown'));

        $element .= CHtml::openTag('button',array('class'=>'btn btn-default btn-caret dropdown-toggle','data-toggle'=>'dropdown'));
        $element .= CHtml::tag('span',array('class'=>'caret'));
        $element .= CHtml::closeTag('button');
        $element .= CHtml::openTag('ul',array('class'=>'dropdown-menu','role'=>'menu','style'=>'auto'));

        foreach($data as $id=>$name)
        {
            $element .= CHtml::openTag('li');
            $element .= CHtml::tag('a',array('data-id'=>$id,'href'=>'javascript:void(0)'),$name,true);
            $element .= CHtml::closeTag('li');
        }

        $element .= CHtml::closeTag('div');

        $drop = self::activeDropDownList($model,$attribute,$data,array('style'=>'display:none'));//

        return $element.$drop;
    }

    /**
     * Генерирует кнопку отмены с иконкой
     * $path - путь для редиректа, по дефолту = null
     * Если $path установлена, то регисрируется скрипт
     * нажатия данной кнопки
     * @param null $path
     * @param array $htmlOptions
     * @return string
     */
    public function buttonTb($label='Back',$path=null,$htmlOptions = array())
    {
        $moduleName = strtolower(Yii::app()->controller->module->id);

        if(!isset($htmlOptions))
        {
            $htmlOptions = array();
        }
        if(!isset($htmlOptions['class']))
        {
            $htmlOptions['class'] = 'btn btn-default';
        }
        if(!isset($htmlOptions['type']))
        {
            $htmlOptions['type'] = 'button';
        }
        if(!isset($htmlOptions['data-icon']))
        {
            $htmlOptions['data-icon'] = 'glyphicon glyphicon-circle-arrow-left';
        }
        if(!isset($htmlOptions['id']))
        {
            $htmlOptions['id'] = 'cancel';
        }

        if(isset($path) && isset($htmlOptions['id']) && $htmlOptions['id'] === 'cancel')
        {
            $cs = Yii::app()->clientScript->registerScript('cancelButtonTbScript',"

                $('#cancel').on('click',function(e){
                    var hostname = location.hostname;
                    var protocol = location.protocol;
                    var href = location.href;
                    document.location.replace(protocol+'//'+hostname+'/user/backend/admin');
                });
            ");
        }
        $button = CHtml::openTag('button',$htmlOptions);
        $button .= CHtml::tag('span',array('class'=>$htmlOptions['data-icon']),'');
        $button .= ' '.Yii::t($moduleName.'Module.base',$label);
        $button .= CHtml::closeTag('button');
        return $button;
    }
}
